package com.mdl.sponsorme.bbdd;

import java.util.ArrayList;

import com.mdl.sponsorme.modelo.Equipo;
import com.mdl.sponsorme.modelo.Usuario;
import com.mdl.sponsorme.modelo.ListaEquipo;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.CompositeFilterOperator;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.FilterPredicate;

public class Equipo_bbdd {
	
	private static String UsuarioEquipo		= "UsuarioEquipo";
	private static String Equipo 			= "Equipo";
	private static String Usuario 			= "Usuario";
	private static String Nombre			= "Nombre";

	private DatastoreService datastore = null;
	private Query query_ue = null;
	private Query query = null;
	
	public Equipo_bbdd(){
		datastore = DatastoreServiceFactory.getDatastoreService();
		query_ue = new Query(UsuarioEquipo);
		query = new Query(Equipo);
	}
	
	public Key guardarEquipo(Usuario usuario, Equipo equipo){
		Entity entUsuarioEquipo = new Entity(UsuarioEquipo);

		entUsuarioEquipo.setProperty(Usuario, usuario.getId());
		entUsuarioEquipo.setProperty(Nombre, equipo.getNombre());
			
		if(!equipo.existebbdd()){//Si el equipo no exsite en bbdd se guarda
		    //TODO Ir incluyendo propiedades del equipo
			Entity entEquipo = new Entity(Equipo);
			
			entEquipo.setProperty(Nombre, equipo.getNombre());
			
			datastore.put(entEquipo);
		}	
		return datastore.put(entUsuarioEquipo);
	}
	
	public ListaEquipo getListaEquipo(Usuario usuario){
		ListaEquipo listaEquipo = new ListaEquipo();
		ArrayList<Filter> listaFiltros = new ArrayList<Filter>();
		
		query_ue.setFilter(new FilterPredicate(Usuario,FilterOperator.EQUAL,usuario.getId()));
		
		// PreparedQuery contains the methods for fetching query results
		// from the datastore
		PreparedQuery pq_ue = datastore.prepare(query_ue);

		for (Entity result_ue : pq_ue.asIterable()) {
			listaFiltros.add(
					new FilterPredicate(Nombre,FilterOperator.EQUAL,(String) result_ue.getProperty(Nombre)));
			listaFiltros.add(
					new FilterPredicate(Nombre,FilterOperator.EQUAL,(String) result_ue.getProperty(Nombre)));
		}
		
		if(!listaFiltros.isEmpty()){
		//try{
		Filter filtroCompuesto = CompositeFilterOperator.and(listaFiltros);
		//}catch{};
		query.setFilter(filtroCompuesto);
		
		// PreparedQuery contains the methods for fetching query results
		// from the datastore
		PreparedQuery pq = datastore.prepare(query);
		for (Entity result : pq.asIterable()) {
			   Equipo equipo = new Equipo(usuario,
			   (String) result.getProperty(Nombre));
			   listaEquipo.add(equipo);
			}
		}
		return listaEquipo; 
	}
}
